// 容斥原理 集合的交
// 集合的交等于全集减去补集的并（正难则反）
// 补集的并可以使用容斥原理来求解
// 测试链接 ：https://www.luogu.com.cn/problem/P1450
// 相关帖子 ：https://www.cnblogs.com/dx123/p/16837832.html
// 相关帖子 ：https://oi-wiki.org/math/combinatorics/inclusion-exclusion-principle/
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

#define ll long long
const int MAXN = 100001;
int c[4], d[4], n, s;
ll dp[MAXN];

// 完全背包预处理出方案数
void f()
{
    dp[0] = 1;
    for(int i = 0; i < 4; ++i)
    {
        for(int j = c[i]; j < MAXN; ++j)
        {
            dp[j] += dp[j - c[i]];
        }
    }
}

ll compute(int s)
{
    ll ans = 0;
    for(int i = 1; i < (1 << 4); ++i) // 枚举状态
    {
        ll t = 0, sign = -1;
        for(int j = 0; j < 4; ++j) // 过滤状态
        {
            if(i & (1 << j))
            {
                t += c[j] * (d[j] + 1);
                sign = -sign;
            }
        }
        // dp[c[j] * (d[j] + 1)] 就是第 j 中硬币超额使用的方法数
        if(s >= t) ans += dp[s - t] * sign; // 超额使用的集合的并集
    }
    // 全集减去不符合条件的补集就是答案
    return dp[s] - ans;
}

int main()
{
    for(int i = 0; i < 4; ++i) scanf("%d", &c[i]);
    f();
    scanf("%d", &n);
    while(n--)
    {
        for(int i = 0; i < 4; ++i) scanf("%d", &d[i]);
        scanf("%d", &s);
        printf("%lld\n", compute(s));
    }

    return 0;
}